package com.asset.service;

import com.asset.pojo.Asset;
import com.asset.util.PageResult;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * 资产管理服务
 * @author 11725
 */
public interface AssetService {
    /**
     * 根据 id 查询资产信息
     * @param id        资产 id
     * @return          Asset 对象
     */
    Asset selectById(Long id);

    /**
     * 新增资产信息
     * @param asset     Asset 对象
     */
    void insert(Asset asset);

    /**
     * 分页查询资产信息
     * @param page      页码
     * @param rows      行数
     * @param name      名称关键字
     * @param cid       分类 id
     * @param depaId    部门 id
     * @return          结果集
     */
    PageResult<Asset> selectByPage(Integer page, Integer rows, String name, Long cid, Long depaId);

    /**
     * 删除资产信息
     * @param id        资产编号
     */
    void delete(Long id);

    /**
     * 修改资产信息，仅允许更新以下字段：
     * <br> - 名称
     * <br> - 品牌
     * <br> - 分类
     * <br> - 部门
     * <br> - 仓库
     * @param asset     Asset 对象
     */
    void update(Asset asset);

    /**
     * 资产状态变更
     * <br>     1.&ensp;    闲置&emsp;&emsp;&emsp; => 预定 or 待处置
     * <br>     2.1         待处置&emsp;&emsp; => 闲置
     * <br>     2.2         待处置&emsp;&emsp; => 维修 or 维护 or 转移 or 报废 or 变卖
     * <br>     3.&ensp;    预定 or 维修 or 维护 => 闲置
     * @param id        资产 id
     * @param to        变更的资产状态
     * @param day       若为领用，需指定领用天数
     */
    void changeStatus(Long id, Integer to, Integer day);

    /**
     * 根据部门 id 和资产状态查询信息
     * @param depaId    部门 id
     * @param status    资产状态
     * @return          List
     */
    List<Asset> selectByDepaIdAndStatus(Long depaId, Integer status);

    /**
     * 根据用户 id 查询资产信息
     * @param userId    userId
     * @return          List
     */
    List<Asset> selectByUserId(Long userId);

    /**
     * 分页查询可进行折旧的资产信息
     * @param page      页码
     * @param rows      行数
     * @return          结果集
     */
    PageResult<Asset> selectByDepreciation(Integer page, Integer rows);

    /**
     * 获取图表数据
     * @param column    列名关键字
     * @return
     */
    List<Map<String, String>> countByColumn(String column);

}
